package com.sikulifang.bank.simulation.service;

import cn.hutool.core.lang.Dict;
import cn.hutool.db.Entity;
import com.sikulifang.bank.simulation.dto.FlowingWaterDTO;

import java.util.Collection;
import java.util.List;
import java.util.Set;

import static com.sikulifang.bank.simulation.constant.TableConstants.DETAIL_TABLE_NAME;

/**
 * ClassName IDetailService
 * Description IDetailService
 *
 * @author Yat
 * Date 2023年6月9日, 0009 16:57
 * version 1.0
 */
public interface IDetailService extends IService {

    @Override
    default String getTableName() {
        return DETAIL_TABLE_NAME;
    }

    /**
     * Description: 通过明细id查询回单
     * <p>
     * Date: 2023年6月10日, 0010 14:31
     *
     * @return {@link Entity}
     */
    Entity getDetailById(String id);

    /**
     * Description: 通过明细id批量查询回单
     * <p>
     * Date: 2023年6月10日, 0010 14:31
     *
     * @return {@link Entity}
     */
    List<Entity> getDetailById(Set<String> id);

    /**
     * 批量创建回单
     */
    void createPdf(List<String> ids);

    /**
     * 创建回单
     */
    String createPdf(Entity entity);

    /**
     * 判断流水号是否重复
     *
     * @param serialNo 流水号
     */
    long findCountBySerialNo(String serialNo);

    /**
     * Description: 记录账号明细
     * <p>
     * Date: 2023年6月15日, 0015 10:24
     *
     * @param dict         数据
     * @param bankCode     银行的code
     * @param saveOrUpdate true-新增  false - 修改
     */
    void updateDetail(Dict dict, String bankCode, boolean saveOrUpdate);

    Object[] updateDetail(Dict dict, String bankCode);

    /**
     * 批量添加流水
     */
    void batchAdd(FlowingWaterDTO flowingWater);

    /**
     * Description: 根据银行code和日期查询明细
     * <p>
     * Date: 2023年6月28日, 0028 17:17
     *
     * @param bankCode 银行code
     * @param tranDate 日期
     * @return {@link List<Entity>}
     */
    List<Entity> findByBankCode(String bankCode, String tranDate);

    List<Entity> findBySerialNo(Collection<String> serialNoS,String batchSerialNo);
}
